好的~ 昨天做好搜尋欄了,今天來做下面的列表
那一樣需要先建一個子組件,可以參考 Day21,這邊就不贅述
這次資料集是用 節慶專區 這支api,這邊先放其中一筆當參考
{
"actId": 451,
"actName": "2021新社花海節",
"levelName": "國際級",
"grade1": "浪漫",
"grade2": "",
"grade3": "樂活",
"grade4": "",
"grade5": "",
"grade6": "",
"description": "「新社花海」活動以「幸福花海、慢活山城、悠遊臺三線」為主軸,促進花海及山城自然農村特色與休閒農業區活動,營造「慢城」、「慢活」與「漫遊」的臺三線,進行點、線、面之推動,打造屬於山城地區之農村休閒、體驗及療癒之新興產業。活動以農委會種苗改良場第二農場40公頃土地為基地,營造秋季花海饗宴。常年則以國家級推動方案之「浪漫臺三線-農情客家庄」環境整備目標,打造中部山城地區環境優美之入口意象。",
"participation": "",
"cityId": 1018,
"address": "臺中市 新社區協成里協興街30號",
"tel": "",
"org": "臺中市政府、行政院農業委會種苗改良繁殖場",
"startTime": "Nov 1, 2021 12:00:00 AM",
"endTime": "Dec 31, 2021 12:00:00 AM",
"cycle": "2021年暫停辦理",
"noncycle": "",
"website": "",
"longitude": "24.2032599",
"latitude": "120.8059929",
"class1": "01",
"class2": "02",
"map": null,
"travellinginfo": "",
"parkinginfo": "",
"charge": "",
"remarks": "",
"cityName": "臺中市 新社區(新社鄉)",
"imageUrl": "/e_new_upload/task/a66dc343-cd8b-4ee0-a265-8d7fff520c3b/C2_315080000H_080551/abfd8ed838981f6c3ca4254b792be5a0368c91cc.jpg"
},
<v-col sm="12"
v-for="item in festivalList"
:key="item.actId">
<Festival :festival="item"></Festival>
</v-col>
在Day22的時候有分析過資料集,imageUrl他是提供內部的檔案位置,在前面還需要加上https://cloud.culture.tw/ 才能順利撈到圖片,這邊寫一個簡單function來轉換連結
getImageUrl(imageUrl) {
return `https://cloud.culture.tw/${imageUrl}`;
},
<v-img
class="white--text align-end"
:src='getImageUrl(festival.imageUrl)'
max-height="200"
/>
這邊使用v-chip組件來呈現,主要有分國際級跟全國級,用簡單的v-if v-else
處理即可。
<v-chip v-if="festival.levelName==='國際級'"
label
color="orange darken-3"
text-color="white"
>
{{ festival.levelName }}
</v-chip>
<v-chip v-else
label
color="blue darken-3"
text-color="white"
>
{{ festival.levelName }}
</v-chip>
原本的日期是 "Nov 1, 2021 12:00:00 AM" 這種格式,但是我想要轉成YYYY/MM/DD 這種比較好閱讀的格式,這邊一樣寫一隻簡單的Funtion來轉換。
這邊用到 Date.parse()
這個功能,他可以把日期格式轉為毫秒,細節可參考這篇
然後用 new Date()
轉成系統可以理解的日期,最後取出需要的欄位組成日期字串,可參考這篇。
getDateFormat(datetime) {
const newDate = new Date(Date.parse(datetime));
return `${newDate.getFullYear()}/${newDate.getMonth() + 1}/${newDate.getDate()}`;
},
因為活動描述都太長了,如果全部顯示的話,畫面會太長也不好看,
原本 v-card 就有預設 overflow 的屬性了,不過它顯示的行數還是太多,
我希望可以最多顯示4行字就好,詳細可參考這篇
這邊採用CSS的方式
<div class="festival-desc">
<p class="ellipsis">{{ festival.description }}</p>
</div>
.festival-desc {
font-size: medium;
}
.ellipsis {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 4; /* 想要顯示多少行字*/
-webkit-box-orient: vertical;
white-space: normal;
}
請參考 GitHub
父組件 FestivalPage.vue
子組件 Festival.vue
好的~ 現在做這種活動清單真的是愈來愈得心應手了
所以就不會像之前那樣一步一步紀錄講解,而是全部做完才分part介紹
寫文速度也快很多~
希望看得懂 吧